<?php
/**
 * Mysql DB
 * @author solar
 */
class Mysql
{	
	private $_config;
	private $_link;
	private $_result;
	
	/**
	 * 构造函数
	 */
	function __construct($config=NULL) {
		if(!is_array($config)) $this->_config=include(PATH_CFG.'/db.inc.php');
		else $this->_config=$config;
		$this->connect();
	}
	
	/**
	 * 连接数据库
	 */
	private function connect() {
		$this->_link=mysql_connect($this->_config['server'].':'.$this->_config['port'],$this->_config['username'],$this->_config['password']) or $this->error();
		$this->query("SET SQL_MODE='',CHARACTER_SET_CONNECTION='utf8',CHARACTER_SET_RESULTS='utf8',CHARACTER_SET_CLIENT='binary',NAMES 'utf8'");
		$this->selectDB($this->_config['dbname']);
	}
	
	/**
	 * 选择数据库
	 * @param string $dbname
	 */
	public function selectDB($dbname) {
		mysql_select_db($dbname,$this->_link) or $this->error();
	}
	
	/**
	 * 查询
	 * @param string $sql
	 */
	public function query($sql='') {
		$this->_result=mysql_query($sql,$this->_link) or $this->error();
		return $this->_result;
	}
	
	/**
	 * 查询第一个字段的值
	 * @param string $sql
	 */
	public function fetchOne($sql) {
		$this->query($sql);
		$count = mysql_result($this->_result,0,0);
		$this->freeResult();
		return $count;
	}
	
	/**
	 * 查询一行数据
	 * @param $sql
	 * @param $mode 数组关联模式：MYSQL_ASSOC，MYSQL_NUM 和 MYSQL_BOTH
	 */
	public function fetchRow($sql,$mode=MYSQL_ASSOC) {
		$this->query($sql);
		$row=mysql_fetch_array($this->_result,$mode);
		$this->freeResult();
		return $row;
	}
	
	/**
	 * 查询数据集
	 * @param $sql
	 * @param $mode 数组关联模式：MYSQL_ASSOC，MYSQL_NUM 和 MYSQL_BOTH
	 */
	public function fetchAll($sql,$mode=MYSQL_ASSOC) {
		$this->query($sql);
		$list=array();
		while($row=mysql_fetch_array($this->_result,$mode)){
			$list[]=$row;
		}	
		$this->freeResult();
		return $list;
	}
	
	/**
	 * 新增的ID
	 */
	public function insertID() {
		return @mysql_insert_id($this->_link);
	}

	/**
	 * 影响条数
	 */
	public function affectedRows() {
		return @mysql_affected_rows($this->_link);
	}
	
	/**
	 * 释放资源
	 */
	public function freeResult() {
		@mysql_free_result($this->_result);
	}
	
	/**
	 * 开始事务
	 */
	public function transaction() {
		$this->query( "START TRANSACTION" );
	}
	
	/**
	 * 提交事务
	 */
	public function commit() {
		$this->query( "COMMIT" );
	}
	
	/**
	 * 回滚事务
	 */
	public function rollback() {
		$this->query( "ROLLBACK" );
	}
	
	/**
	 * 错误处理
	 */
	private function error() {
		trigger_error(mysql_errno()." : ".mysql_error(),E_USER_ERROR);
	}
	
	/**
	 * 关闭连接
	 */
	private function close() {
		mysql_close($this->_link) or $this->error();
	}
	
	/**
	 * 检查连接是否断开，如果断开重新连接
	 */
	public function ping() {
		if(!mysql_ping($this->_link)){
	        $this->close();
	        $this->connect();
	    }
	}
	
	/**
	 * 析构函数
	 */
	function __destruct() {
		$this->close();
	}
}

?>